#include<iostream>
#include<memory>

struct Date
{
    int _year,_month,_day;
    Date(int year = 1,int month = 1, int day = 1)
    :_year(year),_month(month),_day(day)
    {}

    ~Date()
    {
        std::cout << "~Date()" << std::endl;
    }

};

int main()
{
    std::shared_ptr<Date> sp1(new Date);
    //std::shared_ptr<Date> sp2 = std::make_shared<Date>();
    //auto sp3 = std::make_shared<Date>();
    //这三种创建情况是一样的,但make_shared创建的效率会高一些(引用计数上)
    //std::shared_ptr<Date> sp4 = new Date;//智能指针不支持隐式类型转换智能指针的构造函数都是用explicit进行修饰
    //operator bool:将自定义类型的对象转换成内置的bool类型,如果是一个空对象返回false否则返回true
    //std::shared_ptr<Date> sp4(std::move(sp3));
    if(sp1)
    {
        std::cout << "no empty" << std::endl;
    }
    else
    {
        std::cout << "empty" << std::endl;
    }

    if(sp1)
    {
        std::cout << "no empty" << std::endl;
    }
    else
    {
        std::cout << "empty" << std::endl;
    }
    return 0;
}